package com.xz.example;

import com.xz.example.factory.SkinFactory;
import com.xz.example.model.Button;
import com.xz.example.model.ComboBox;
import com.xz.example.model.TextField;
import com.xz.example.util.XMLUtil;
import javafx.scene.control.Skin;

/**
 * @author 张志航     
 * @version V1.0.0
 * @projectName design_mode
 * @title     Client   
 * @package    com.xz.example  
 * @date   2019/11/27 10:56  
 * @explain
 */
public class Client {

    /**
     *  需求:
     *      某公司需要开发一套界面皮肤库，可以对基于Java的桌面软件进行界面美化。用户可以通过菜单选择皮肤，不同的皮肤将提供视觉效果
     *      不同的按钮、文本框、组合框等界面元素，例如春天（Spring）风格将提供浅绿色按钮、绿色边框的文本框以及绿色边框的组合框，
     *      夏天（Summer）风格提供浅蓝色的按钮、蓝色的边框文本框以及蓝色边框的组合框。
     *  分析：
     *      使用抽象工厂模式设计该界面皮肤库：
     *          为了系统具有良好的扩展性，充分的利用多态对系统进行设计，经过分析我们知道，首先我们需要按钮（Button）、文本框（TextField）、
     *          组合框（ComboBox）作为抽象产品类，各种风格的皮肤展示不风格的组件，SummerFactory、SpringFactory用来生产不同风格的产品。
     * @param args
     */
    public static void main(String[] args) {

        Object bean = XMLUtil.getBean();
        if (null != bean && bean instanceof SkinFactory){
            SkinFactory skinFactory = (SkinFactory) bean;
            Button button = skinFactory.createButton();
            ComboBox comboBox = skinFactory.createComboBox();
            TextField textField = skinFactory.createTextField();
            button.display();
            comboBox.display();
            textField.display();
        }

    }
}
